﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using dai_hoc_tuong_lai.Areas.Admin.Models;
using Dhtl.Service.IService;
using Comom.Project.JsonCom;
using DataBase.Daihoctuonglai;
using Comom.Project.ControllerCom;
using Dhtl.Service.Export;
using FarmeWork.Helper;
using dai_hoc_tuong_lai.Models;

namespace dai_hoc_tuong_lai.Areas.Admin.Controllers
{
    [Authorize(Roles = "Admin,employee")]
    public class ContactController : UTController
    {
        //
        // GET: /Admin/Contact/
        private readonly IEmailDangky _iEmailDangky;
        private readonly IExport _iExport;
        private readonly IEmailSystem _iEmailSystem;
        private readonly IContact _iContact;
        private readonly EmailHelper emailCode = new EmailHelper();

        public ContactController(IEmailDangky iEmailDangky, IExport iExport, IEmailSystem iEmailSystem, IContact iContact)
        {
            this._iEmailDangky = iEmailDangky;
            this._iExport = iExport;
            this._iEmailSystem = iEmailSystem;
            this._iContact = iContact;
        }

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult List()
        {

            var listEntity = _iContact.List();
            List<ContactModel> model = new List<ContactModel>();
            try
            {
                foreach (var item in listEntity)
                {
                    ContactModel ml = new ContactModel();
                    ContactModel.MapFrom(item, ref  ml);
                    if (item.Loailienhe == true) ml.trangthai = "đã xem";
                    else ml.trangthai = "chưa xem";
                    model.Add(ml);
                }
            }
            catch { }

            return PartialView("_List", model);
        }

        public ActionResult Add()
        {
            ContactModel model = new ContactModel();
            model.Id = 0;
            model.DateCreate = DateTime.Now;
            model.Loailienhe = true;
            
            return PartialView("_Add", model);
        }

        public ActionResult Update(int id)
        {
            ContactModel model = new ContactModel();
            var entity = _iContact.GetById(id);
            try
            {
                ContactModel.MapFrom(entity, ref model);
            }
            catch { }

            return PartialView("_Update", model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddOrUpdate(ContactModel model)
        {

            if (string.IsNullOrEmpty(model.Name))
            {
                return JsonError("Vui lòng nhập tên người liên hệ");
            }

            if (string.IsNullOrEmpty(model.Email))
            {
                return JsonError("Vui lòng nhập email người liên hệ");
            }

            if (!IsValidEmailAddress(model.Email))
            {
                return JsonError("Emal bạn nhập sai định dạng");
            }

            if (string.IsNullOrEmpty(model.Dt))
            {
                return JsonError("Vui lòng nhập số điện thoại người liên hệ");
            }

            if (!IsNumber(model.Dt))
            {
                return JsonError("Số điện thoại bạn nhập sai số, chỉ cho phép nhập số");
            }

            if (string.IsNullOrEmpty(model.NoiDung))
            {
                return JsonError("Vui lòng nhập nội dung cần liên hệ");
            }

            Contact entity = new Contact();
            entity.DateCreate = DateTime.Now;
            entity.Id = 0;
            entity.Name = model.Name;
            entity.Email = model.Email;
            entity.Dt = model.Dt;
            entity.DiaChi = model.DiaChi;
            entity.NoiDung = model.NoiDung;
            entity.Loailienhe = model.Loailienhe;

            _iContact.AddOrUpdate(entity);
            return JsonSuccess(Url.Action("Index"), null);
        }

        public ActionResult Delete(int id)
        {
            try
            {
                _iContact.delete(id);
                return JsonSuccess(Url.Action("Index"), null);
            }
            catch (Exception ex)
            {
                return JsonError(ex.ToString());
            }
        }

        public ActionResult ExportExcel()
        {
            try
            {
                var listVisa = _iContact.List();
                var fileName = string.Format("Danh-Sach-lien-he_{0}.xlsx", DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss"));
                string filePath = System.IO.Path.Combine(Request.PhysicalApplicationPath, "Content\\files\\ExportImport", fileName);
                _iExport.ExportContactToXlsx(filePath, listVisa);
                var bytes = System.IO.File.ReadAllBytes(filePath);
                return File(bytes, "text/xls", fileName);
            }
            catch (Exception exc)
            {
                return RedirectToAction("Index");
            }
        }
    }
}
